function my_image2draw(Value,z,option)
% my_image2draw(Value,z,option)
% -------- 自定义函数 --------
% 使用pcolor绘制图
% Value: 三维或二维矩阵
% z：    可选参数，double，第三维的下标。
% option:
%   "Center": true/false, Climit要中心化，例如[-1,1]这样对称，能够凸显出相对0的差距
%   "Climit": [cmin,cmax] 设定caxis()的climit
%
% 使用pcolor达到和image相同的绘制效果 
% pcolor绘制的时候是以左下为坐标起点的，使得绘制结果和image上下颠倒，用flipud

% 作者：sid（cnqdcyq@163.com）
% log：
%   2021/11/20 create 根据image2draw改编 测试
%   2022/01/04 fix-bug when variable has only unique value
%  

    arguments
        Value
        z = 1
        option.Climit = []
        option.Center = false
    end 

    

    SetValue = my_getunique(Value(:,:,z),'omitnan');
    if numel(SetValue)==1
        image2draw(Value,z);
    else
        Climit = getClimit(option.Climit,SetValue);
        Type = returnType(Climit,SetValue);
        Climit = getNewClimit(Climit,Type,option.Center);
        ClassNumber = Climit(2)-Climit(1);
        colormap(parula(ClassNumber))
        image2draw(Value,z);
        caxis(Climit);
        colorbar;
    end
end



function output = getClimit(Climit,SetValue)
    oldCaxis = [min(SetValue),max(SetValue)];
    if isempty(Climit)
        output = oldCaxis;
    else
        output = Climit;
    end     
end

function output = returnType(Climit,SetValue)
Tag = SetValue < Climit(1) | SetValue > Climit(2);
output = [Tag(1),Tag(2)];
end

function output = getNewClimit(Climit,Type,Center)
output(1) = Climit(1) - double(Type(1)) - 0.5;
output(2) = Climit(2) + double(Type(2)) + 0.5;
if Center
    Abs = max(abs(output));
    output = [-Abs,Abs];
end
end

function image2draw(raster,z)

Value = raster(:,:,z);
pcolor(flipud(Value));
shading flat
axis equal        
end